const util = require('util');






async function fn() {
    return 'hello world';
}
const callbackFunction = util.callbackify(fn);
// 将 async 异步函数（或者一个返回值为 Promise 的函数）转换成遵循异常优先的回调风格的函数
callbackFunction((err, ret) => {
    if (err) throw err;


    // true
    util.isArray([])
    // true
    util.isArray(new Array)
    // false
    util.isArray({})
    // true
    util.isRegExp(/some regexp/)
    // true
    util.isRegExp(new RegExp('another regexp'))
    // false
    util.isRegExp({})

    // true
    util.isDate(new Date())
    // false (without 'new' returns a String)
    util.isDate(Date())
    // false
    util.isDate({})
    console.log(ret);
});


function fn2() {
    return Promise.reject(null);
}
const callbackFunction2 = util.callbackify(fn2);
callbackFunction2((err, ret) => {
    // 当 Promise 被以 `null` 拒绝时，它被包装为 Error 并且原始值存储在 `reason` 中。
    err && err.hasOwnProperty('reason') && err.reason === null;  // true
});


//   util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。

// util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法，通常用于调试和错误输出。
// 它至少接受一个参数 object，即要转换的对象。

